<?php
/**
 * clase_zen_POA_PuntoCorte.php
 * @author Juan Belon
 * @access public
 * @copyright LGPL, GPL
 * @package zen_POA
 * @version 0.1.1
 * @uses zenphp FrameWork
 * @link http://csl2-zenphp.forja.rediris.es
 * @link http://www.zenphp.es
 * @link https://forja.rediris.es/projects/csl2-zenphp/
 * @desc En la Programación Orientada a Aspectos, un punto de corte es un conjunto de puntos de unión.
 * En cualquier punto cuando la ejecución del programa the llega a un punto de unión descrito en la lista
 * del punto de corte, un trozo de código se asocia con el punto de corte (llamado anotación,notacion en zenphp)
 * y es ejecutado. 
 * Esto permite al programador describir donde y cuando se ejecuta el código adicionalwhere and when additional code should be executed 
 * añadiéndolo a lo que hay ya definido en su marco.
 * De forma que permite añadir aspectos al software existente, o diseñar programas con una clara separación de intereses,
 * ya que la clase tejedora de código incluye los diferentes aspectos generando una aplicación completa.
 * TODO: Completar la Documentación de las clases de POA
 */
// +----------------------------------------------------------------------
// | zenphp.es
// +----------------------------------------------------------------------
class zen_POA_PuntoCorte
{
	var $nombreClase;
	var $nombreFuncion;
	var $sin_nombreClase;
	var $sin_nombreFuncion;
    /**
    * @desc anotador asociado
    * @var 
    */
	var $anotador;
    /**
    * @desc Constructor
    * @param zen_POA_Anotador $anotador
    * @param array|str $clase
    * @param array|str $nombre_clase
    * @param array|str $nombre_funcion
    * @return zen_POA_PuntoCorte
    */
    function zen_POA_PuntoCorte($anotador, $clase, $funcion, $nombre_clase, $nombre_funcion)
    {
    	// Definir la/s clase/s
		$this->nombreClase = (is_array($clase) ? $clase : split(",[ ]*", $clase));

		// Definir la/s clase/s sin nombre
        $this->sin_nombreClase = (is_array($nombre_clase) ? $nombre_clase : split(",[ ]*", $nombre_clase));

        // Definir Funcion/es
		$this->nombreFuncion = (is_array($funcion) ? $funcion : split(",[ ]*", $funcion));
		
        // Definir Sin Nombre de Funcion
		$this->sin_nombreFuncion = (is_array($nombre_funcion) ? $nombre_funcion : split(",[ ]*", $nombre_funcion));
		
    	// Eliminar caracteres de inicio/fin retorno del código fuente
    	$this->anotador = $anotador;
    }
    

	function obtenerNombreClase() { return $this->nombreClase; }

	function tieneNombreClase($v) { return in_array($v, $this->nombreClase, true); }

	function obtenerNombreFuncion() { return $this->nombreFuncion; }

	function tieneNombreFuncion($v) { return in_array($v, $this->nombreFuncion, true); }
	
	function obtenerNombreClase_SinNombre() { return $this->sin_nombreClase; }

	function tieneNombreClase_SinNombre($v) { return in_array($v, $this->sin_nombreClase, true); } 
	
	function obtenerNombreFuncion_SinNombre() { return $this->sin_nombreFuncion; }

	function tieneNombreFuncion_SinNombre($v) { return in_array($v, $this->sin_nombreFuncion, true); }

    /**
    * @desc devuelve el anotador asociado
    * @return zen_POA_Anotador
    */
	function &obtenerAnotador() { return $this->anotador; }
}

?>